#include<iostream>

using namespace std;
// zdl:: 光是看到这个题目，我可能会想到时殷弘二分来解问题，但是这里还有一些只是没有学完，所以这里，我峨嵋你就采用一种更加见到那的方法来解决
// zdl:: 扩展域并查集 + 贪心
#include<algorithm>
int n, m;

const int N =  4e4 + 10, M = 1e5 + 10;
int fa[N];
struct node
{
    int a, b, c;
}e[M];
int find(int x)
{
    return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void un(int x, int y)
{
    fa[find(x)] = find(y);
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> e[i].a >> e[i].b >> e[i].c;
    }
    sort(e + 1, e + 1 + m, [](node& x, node& y){
        return x.c > y.c;
    });
    // zdl:: 接下来就是贪心和扩展域并查集的方法了，现在我们使用这样的
    // zdl:: 在使用扩展与并查集的时候一定要记得先将整个数组惊醒初始化，否则就会出现问题
    for (int i = 1; i <= n * 2; i++)
    {
        fa[i] = i;
    }
    for (int i = 1; i <= m; i++)
    {
        int a = e[i].a, b = e[i].b, c = e[i].c;
        un(a , b + n); un(b, a + n);
        if (find(a) == find(b))
        {
            cout << c << endl;
            return 0;
        }
    }

    cout << 0 << endl;
    return 0;
}